﻿var _dungLuongToiDa = 10485760;
var _chuDungLuongToiDa = "10MB";

var $khungSoan;

//Khung, mảng chứa loại bài viết để thực hiện
var $khungChuaLoaiBaiViet;
var MangLoaiBaiViet = new Array();
//Dùng để lưu mảng loại bài viết 
//Khi trang chỉnh sửa bài viết => làm mới (tắt chỉnh sửa đã có)
//var MangLoaiBaiViet_SuaBai = new Array();

//Giá trị hỗ trợ việc lấy bài
var soBaiVietHienTai = 1;
var soBaiVietMoiLanTaiThem = 7;

//Biến tạm
var bienTam;

//Biến kiểm tra công việc
var dangDangBaiViet = false;
var dangDangBinhLuan = false;

//Dùng để xác định việc lấy bài đang được thực hiện, giúp ko bị dồn lệnh
var dangLayBaiViet = false;

$(function () {
    //Khởi tạo
    khoiTao();
    khoiTaoXuLy(document);

    //ajax bài viết
    layBaiViet();
})





/* 
    Khởi tạo
*/
function khoiTao() {
    $khungSoan = $('#soan-bai-viet');

    $khungChuaLoaiBaiViet = $('.article-type-container');
    $khungChuaLoaiBaiViet.find('.add-article-type-button').on('click', function () {
        chuyenDoiKhungThemLoaiBaiViet();
    });
    $khungChuaLoaiBaiViet.find('.decline-add-article-type').on('click', function () {
        chuyenDoiKhungThemLoaiBaiViet();
    });
    $khungChuaLoaiBaiViet.find('.add-article-type-set-time').on('change', function () {
        kiemTraThoiGianThietDatLoaiBaiViet();
    })
    $khungChuaLoaiBaiViet.find('.accept-add-article-type').on('click', function () {
        themLoaiBaiViet();
    });
    $('.compose').on('submit', function () {
        dangBaiViet();
    });
    //Khi kéo xuống đụng ... thì load thêm
    $(window).on('scroll', function () { kiemTraLayThemBaiViet(); });
}

function khoiTaoXuLy(container) {
    var $khungSoanBaiViet = $(container).find('.compose');
    $khungSoanBaiViet.find('.attach-file-button-container').on('click', function () {
        dangTapTin($(this).parents('.compose'));
    });
    $khungSoanBaiViet.find('.attach-file').on('change', function () {
        tapTinThayDoi($(this).parents('.compose'));
    })
    $khungSoanBaiViet.find('.cancel-attach-file').on('click', function () {
        huyDangTapTin($(this).parents('.compose'));
    });

    $(container).find('.show-file-button').on('click', function () {
        taiTapTin(this);
    });
    return container;
}
function taiTapTin(object) {
    window.event.preventDefault();
    _ajax(
        object.getAttribute('href'),
        null,
        'POST',
        'json',
        function (data) {
            if (data.trangThai == 'OK') {
                $(object).parent().html(data.ketQua);
            }
            else {
                thongBaoLoi(data.trangThai);
            }
        },
        thongBaoLoi,
        $(object).find('span').attr('id'),
        'Diễn đàn - Tải tập tin'
    )
}
function chuyenDoiKhungThemLoaiBaiViet() {
    $khungChuaLoaiBaiViet.find('.add-article-type-container').slideToggle();
}
function kiemTraThoiGianThietDatLoaiBaiViet() {
    if (window.event.srcElement.value == 2) {
        $khungChuaLoaiBaiViet.find('.add-article-type-time').addClass('set-time');
    }
    else {
        $khungChuaLoaiBaiViet.find('.add-article-type-time').removeClass('set-time');
    }
}
function xoaLoaiBaiVietDuocChon(doiTuong, ma) {
    doiTuong.remove();

    for (var i = 0; MangLoaiBaiViet.length; i++) {
        if (MangLoaiBaiViet[i].maLoaiBaiViet == ma) {
            MangLoaiBaiViet.splice(i, 1);
            break;
        }
    }
}
function themLoaiBaiViet() {
    loaiBaiVietDuocChon = $khungChuaLoaiBaiViet.find('.add-article-type-type > select')[0];
    if (loaiBaiVietDuocChon.value == -1) {
        return;
    }
    var ngay = $khungChuaLoaiBaiViet.find('.add-article-type-date-setting').val();
    var gio = $khungChuaLoaiBaiViet.find('.add-article-type-time-setting').val();
    var text = loaiBaiVietDuocChon.options[loaiBaiVietDuocChon.selectedIndex].text;

    var thoiGian = '';
    if (document.getElementsByClassName('add-article-type-set-time')[0].value != 1 && (ngay != '' || gio != '')) {
        thoiGian = ngay + ' ' + gio;
    }
    for (var i = 0; i < MangLoaiBaiViet.length; i++) {
        if (MangLoaiBaiViet[i].maLoaiBaiViet == loaiBaiVietDuocChon.value) {
            alert('.current-article-type-' + loaiBaiVietDuocChon.value);
            MangLoaiBaiViet[i].thoiGianApDung = thoiGian;
            $('.current-article-type').find('.current-article-type-' + loaiBaiVietDuocChon.value).find('.article-type-time').html(((thoiGian == '') ? '' : (' - ' + thoiGian)));
            return;
        }
    }

    $('.current-article-type').append(
        '<article class="article-type-info current-article-type-' + loaiBaiVietDuocChon.value + '" onclick="xoaLoaiBaiVietDuocChon(this, ' + loaiBaiVietDuocChon.value + ')">' +
            '<section class="article-type-name">' + text + '</section>' +
            '<section class="article-type-time">' + ((thoiGian == '') ? '' : (' - ' + thoiGian)) + '</section>' +
            '<section class="article-type-clear"><i class="pe-7s-close"></i></section>' +
        '</article>');
    MangLoaiBaiViet.push({ 'maLoaiBaiViet': loaiBaiVietDuocChon.value, 'thoiGianApDung': thoiGian });
}




/*
    Tập tin
*/
function dangTapTin(control) {
    control.find('.attach-file')[0].click();
}
function tapTinThayDoi(control) {
    var file = control.find('.attach-file')[0].files[0];
    if (file.size > _dungLuongToiDa) {
        alert('Tập tin đính kèm không thể vượt quá ' + _chuDungLuongToiDa);
    }
    else {
        control.find('.text-attach-file').text(file.name);
        control.find('.cancel-attach-file').addClass('show');
    }
    control.addClass('show-post-button');
}
function huyDangTapTin(control) {
    $(control.find('.attach-file')[0]).val('');
    control.find('.cancel-attach-file').removeClass('show');
    control.find('.text-attach-file').text("Thêm tập tin");
    control.removeClass('show-post-button');
}





function kiemTraThongTin() {
    if ($khungSoan.find('.title-editor')[0].value == "") {
        alert('Nhập tiêu đề');
        return false;
    }
    if ($khungSoan.find('.f-placeholder').length > 0) {
        alert('Nhập nội dung');
        return false;
    }
    return true;
}

function kiemTraThongTin_BinhLuan(form) {
    if (form.elements['NoiDung'].value == '' && form.elements['TapTin'].files.length == 0) {
        return false;
    }
    return true;
}




//Đăng bài viết
function dangBaiViet() {
    window.event.preventDefault();
    
    if (dangDangBaiViet) {
        return;
    }

    if (!kiemTraThongTin()) {
        return;
    }

    var form = window.event.srcElement;

    form.elements['LoaiBaiViet'].value = JSON.stringify(MangLoaiBaiViet);

    dangDangBaiViet = true;
    _ajaxForm(
        form.action,
        new FormData(form),
        'POST',
        'json',
        form.enctype,
        false,
        false,
        false,
        function (data) {
            if (data.trangThai == 'OK') {
                dangBaiThanhCong(data.ketQua);
            }
            else {
                thongBaoLoi(data.trangThai);
            }
        },
        thongBaoLoi,
        'dau-hieu-tai',
        'Diễn đàn - Đăng bài viết thất bại'
    );
    form.reset();
    $('#viet-bai').editable("setHTML", "");
    $(form).find('.cancel-attach-file').removeClass('show');
    $(form).find('.text-attach-file').text("Thêm tập tin");
}

function dangBaiThanhCong(html) {
    $('#dien-dan-bai-viet').prepend(khoiTaoBaiViet($(html)));
    dangDangBaiViet = false;
}

/*
    Kiểm tra để lấy thêm bài viết
*/
function kiemTraLayThemBaiViet() {
    if ($(window).scrollTop() + $(window).height() > $('#tai-them-bai-viet').offset().top - 300) {
        layBaiViet();
    }
}

function layBaiViet() {
    if (dangLayBaiViet) {
        return;
    }

    dangLayBaiViet = true;
    _ajax(
        '/BaiViet/KhoaHoc_Nhom_DienDan_BaiViet',
        { ma: maKhoaHoc, tu: soBaiVietHienTai, den: soBaiVietHienTai + soBaiVietMoiLanTaiThem },
        'POST',
        'json',
        function (data) {
            if (data.trangThai == 'OK') {
                layBaiVietThanhCong(data.ketQua);
            }
            else {
                thongBaoLoi(data.trangThai);
            }
        },
        thongBaoLoi,
        'dau-hieu-tai',
        'Diễn đàn - Lấy bài viết'
    );
    //tăng số bài viết hiện tại để lấy thêm bài viết lần sau
}

function layBaiVietThanhCong(html) {
    //khởi tạo cho html trước khi chèn để được sự kiện
    $('#dien-dan-bai-viet').append(khoiTaoBaiViet($(html)));

    var soBaiVietLayDuoc = $(html).find('.post-container').length;
    soBaiVietHienTai += soBaiVietLayDuoc;

    //Nếu số bài viết lấy được == số bài viết mỗi lần tải thêm thì 
    //gán dangLayBaiViet = false để lần sau có thể lấy nữa
    //Nếu không thì ko thay đổi để không lấy nữa
    if (soBaiVietLayDuoc == soBaiVietMoiLanTaiThem) {
        dangLayBaiViet = false;
    }
}

function khoiTaoBaiViet(html) {
    html = khoiTaoXuLy(html);

    //Lấy mã bài viết của bài viết được khởi tạo
    var maBaiViet = (html.find('.ma-bai-viet').length != 0) ? html.find('.ma-bai-viet')[0].value : 0;
    
    //Nếu mã bài viết = 0 => ko có mã bài viết => ko có quyền bình luận, sửa bài,... => bỏ wa
    if (maBaiViet != 0) {
        html.find('.xoa-bai-viet').on('click', function () {
            window.event.preventDefault();
            if (!confirm('Bạn có chắc là muốn xóa?')) {
                return;
            }
            var element = this;
            _ajax(
                '/BaiViet/XoaBaiViet/' + maBaiViet,
                null,
                'POST',
                'text',
                function (data) {
                    if (data == 'OK') {
                        $(element).parents('.article-item').remove();
                    }
                    else {
                        thongBaoLoi(data.trangThai);
                    }
                },
                thongBaoLoi,
                'dau-hieu-tai',
                'Diễn đàn - Xóa bài viết'
            );
        });
        html.find('.dang-binh-luan').on('submit', function () {
            window.event.preventDefault();

            if (dangDangBinhLuan) {
                return;
            }

            var form = window.event.srcElement;
            if (!kiemTraThongTin_BinhLuan(form)) {
                alert('Cần nhập thông tin trước khi đăng');
                return;
            }

            bienTam = form;
            dangDangBinhLuan = true;
            _ajaxForm(
                '/BinhLuan/KhoaHoc_Nhom_DienDan_ThemBinhLuan',
                new FormData(form),
                'POST',
                'json',
                form.enctype,
                false,
                false,
                false,
                function (data) {
                    if (data.trangThai) {
                        dangBinhLuanThanhCong(data.ketQua);
                    }
                    else {
                        thongBaoLoi(data.trangThai);
                    }
                },
                thongBaoLoi,
                'dau-hieu-tai',
                'Diễn đàn - Đăng bình luận thất bại'
            );
            form.reset();
            $(form).find('.cancel-attach-file').removeClass('show');
            $(form).find('.text-attach-file').text("Thêm tập tin");
            $(form).removeClass('show-post-button');
        })
        html.find('.xoa-binh-luan').on('click', function () {
            window.event.preventDefault();
            if (!confirm('Bạn có chắc là muốn xóa?')) {
                return;
            }
            var element = this;
            _ajax(
                this.href,
                null,
                'POST',
                'text',
                function (data) {
                    if (data == 'OK') {
                        $(element).parents('.comment-item').remove();
                    }
                    else {
                        thongBaoLoi(data);
                    }
                },
                thongBaoLoi,
                'dau-hieu-tai',
                'Diễn đàn - Xóa bình luận'
            );
        });

        html.find('.sua-bai-viet').on('click', function () {
            window.event.preventDefault();

            var $object = $(this);

            var $container = $(window.event.srcElement).parents('.post-container').find('.content');
            var $tieuDe = $($container.find('.tieu-de'));
            var $noiDung = $($container.find('.noi-dung'));

            $noiDung.editable({
                inlineMode: false,
                buttons: ['bold', 'italic', 'underline', 'fontSize', 'color', 'align', 'formatBlock', 'insertOrderedList', 'insertUnorderedList', 'createLink', 'insertImage'],
                zIndex: 3,
                theme: 'gray',
                blockTags: ['p', 'pre', 'blockquote'],
                placeholder: 'Viết bài...'
            });

            var bienTamSuaBai = [
                $tieuDe.html(),
                $noiDung.editable('getHTML')
            ];

            $object.hide();

            $tieuDe.hide();
            var $tieuDeEditor = $('<input class="title-editor" placeholder="Tiêu đề..." value="' + bienTamSuaBai[0] + '" />');
            $tieuDe.after($tieuDeEditor);

            $buttonContainer = $('<div class="post-button-container"><div class="nut-sua"><i class="pe-7s-check"></i><input type="button" value="Sửa" class="post-button" /></div><div class="nut-huy"><i class="pe-7s-close-circle"></i><input type="button" value="Hủy" class="post-button" /></div></div>');
            $buttonContainer.find('.nut-huy').on('click', function () {
                $object.show();
                $tieuDe.html(bienTamSuaBai[0]);
                $tieuDe.show();
                $tieuDe.next().remove();
                $noiDung.editable('destroy');
                $noiDung.html(bienTamSuaBai[1]);
                $noiDung.next().remove();

                delete $object;
                delete $tieuDe;
                delete $noiDung;
            });
            $buttonContainer.find('.nut-sua').on('click', function () {
                _ajax(
                    '/BaiViet/SuaBaiViet',
                    { maBaiViet: maBaiViet, tieuDe: $tieuDeEditor.val(), noiDung: $noiDung.editable('getHTML') },
                    'POST',
                    'text',
                    function (data) {
                        if (data == 'OK') {
                            $object.show();
                            $tieuDe.html($tieuDeEditor.val());
                            $tieuDe.show();
                            $tieuDe.next().remove();
                            $noiDung.editable('destroy');
                            $noiDung.next().remove();

                            delete $object;
                            delete $tieuDe;
                            delete $noiDung;
                        }
                        else {
                            thongBaoLoi(data);
                        }
                    },
                    thongBaoLoi,
                    'dau-hieu-tai',
                    'Diễn đàn - Sửa bài viết'
                );
            });
            $noiDung.after($buttonContainer);
        });
        _ajax(
            '/BinhLuan/KhoaHoc_Nhom_DienDan_BinhLuan',
            { ma: maBaiViet, tu: 1, den: -1 },
            'POST',
            'json',
            function (data) {
                if (data.trangThai == 'OK') {
                    html.find('.danh-sach-binh-luan').html(khoiTaoBinhLuan($(data.ketQua)));
                }
                else {
                    thongBaoLoi(data.trangThai);
                }
            },
            thongBaoLoi,
            'dau-hieu-tai',
            'Diễn đàn - Lấy bình luận'
        );
    }

    return html;
}

function dangBinhLuanThanhCong(html) {
    $(bienTam).parent().siblings('.danh-sach-binh-luan').prepend(khoiTaoBinhLuan($(html)));
    dangDangBinhLuan = false;
}
function khoiTaoBinhLuan(html) {
    html.find('.xoa-binh-luan').on('click', function () {
        window.event.preventDefault();
        if (!confirm('Bạn có chắc là muốn xóa?')) {
            return;
        }
        var element = this;
        _ajax(
            this.href,
            null,
            'POST',
            'text',
            function (data) {
                if (data == 'OK') {
                    $(element).parents('.comment-item').remove();
                }
                else {
                    thongBaoLoi(data);
                }
            },
            thongBaoLoi,
            'dau-hieu-tai',
            'Diễn đàn - Xóa bình luận'
        );
    });
    html.find('.show-file-button').on('click', function () {
        taiTapTin(this);
    });
    return html;
}